home *** CD-ROM | disk | FTP | other *** search
/ Aminet 45 / Aminet 45 (2001)(GTI - Schatztruhe)[!][Oct 2001].iso / Aminet / dev / e / 2b_CrtvE_src.lha / io1.s < prev    next >
Text File  |  2001-01-29  |  10KB  |  453 lines

  1. ;; Errors/Warnings/Messages/Dos support
  2. ; ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ;
  3. ;   The Error, Message And DosSupport Part          ;
  4. ; ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ;
  5.  
  6. ERROR:                ; D0=ERRORNR.
  7.     BSR PREPMACROERROR
  8.     MOVE.W  #5,CURSPOT
  9.     MOVE.L  A0,SAVEDREGS
  10.     MOVE.L  A3,SAVEDREGS+4
  11.     MOVE.L  D0,D7
  12.     BSR SHOWIDENT
  13.     MOVE.L  #ERTEXT,D2
  14.     MOVE.L  #ERTEXTEND-ERTEXT,D3
  15.     BSR.W   WRITECON        ; WRITE 'ERROR: '
  16.     MOVE.W  D7,D0
  17.     ASL.W   #2,D0
  18.     LEA ERRORTAB,A0
  19.     MOVE.L  0(A0,D0.W),D2       ; FIND ERSTRING
  20.     MOVE.L  D2,A0
  21. .5: TST.B   (A0)+
  22.     BNE .5
  23.     SUBQ.L  #1,A0
  24.     MOVE.L  A0,D3
  25.     SUB.L   D2,D3
  26.     BSR.W   WRITECON        ; WRITE 'YO SYNTAX SUCKS'
  27.     BSR.W   WRITELN
  28.     MOVE.W  LINENUM2(PC),D4
  29.     BNE.S   .6
  30.     MOVE.W  LINENUM,D4
  31.     CMP.W   #-1,D4
  32.     BEQ.S   .4
  33. .6: MOVE.W  D4,RETERROR
  34.     MOVE.L  ECODE(PC),A0
  35.     MOVE.W  D4,D2
  36.     BEQ.S   .1
  37.     BMI.S   .1
  38.     SUBQ.W  #1,D2
  39.     MOVEQ   #10,D0
  40. .XL:CMP.B   (A0)+,D0        ; FIND LINE
  41.     BNE.S   .XL
  42.     DBRA    D2,.XL
  43. .1:
  44.     BSR RECONSTRUCT     ; !!!!
  45.  
  46.     MOVE.L  A0,D0           ; BACKUP A0
  47. .1B:    CMPI.B  #0,(A0)         ; find eol
  48.     BEQ.S   .2
  49.     CMPI.B  #10,(A0)+
  50.     BNE.S   .1B
  51. .3: CLR.B   -(A0)
  52.     MOVE.L  A0,D3
  53.     SUB.L   D0,D3
  54.     LEA ERARGS(PC),A1
  55.     MOVE.L  D0,4(A1)
  56.     LEA ERLINE(PC),A0
  57.     ADDQ.W  #1,D4
  58.     EXT.L   D4
  59.     MOVE.L  D4,(A1)
  60.     BSR.W   WRITEFORMAT
  61. .4: MOVE.L  ERROROBJ(PC),D0
  62.     BEQ.S   .X
  63.     LEA ERARGS(PC),A1       ; WRITE 'WITH: '
  64.     MOVE.L  D0,(A1)
  65.     LEA EROBJLINE(PC),A0
  66.     BSR WRITEFORMAT
  67. .X: BSR PREPWRITEMACROLINE
  68.     RTS
  69. .2: ADDQ.L  #1,A0
  70.     BRA.S   .3
  71.  
  72. RECONSTRUCT:          ; GETS START LINE IN A0, RETURNS NEW
  73.     MOVE.L  A0,LINEOFF      ; ADR. IN A0, TRASHES NOTHING
  74.     MOVEM.L D0-D4/A1-A4,-(A7)
  75.     MOVE.W  ERRWHERE(PC),D0
  76.     BEQ .EXIT
  77.     CMP.W   #1,D0
  78.     BEQ.S   .LA0
  79.     BSR CONSTRUCT
  80.     TST.L   D0
  81.     BEQ.S   .GOTP
  82.     BRA .EXIT
  83. .LA0:   MOVE.L  SAVEDREGS(PC),ERPOINT   ; ERROR IS IN LEX
  84. .GOTP:  MOVE.L  ERPOINT(PC),D0
  85.     MOVE.L  ECODE,D1
  86.     SUB.L   D0,D1
  87.     NEG.L   D1
  88.     MOVE.L  D1,BYTEOFF
  89.     MOVE.L  LINEOFF(PC),A0
  90.     MOVE.L  ERBUF(PC),A1
  91.     MOVEQ   #0,D1           ; 0=SEARCH,1=ON,2=AFTER ERPOS
  92. .1: CMP.L   A0,D0
  93.     BNE.S   .2
  94.     LEA .ON(PC),A2      ; START OF ERPOS
  95. .3: MOVE.B  (A2)+,(A1)+
  96.     BNE.S   .3
  97.     SUBQ.L  #1,A1
  98.     MOVEQ   #1,D1
  99. .2: MOVE.B  (A0)+,D2        ; READ BYTE
  100.     BEQ.S   .NL         ; NL ?
  101.     CMP.B   #10,D2
  102.     BEQ.S   .NL         ; NL ?
  103.     MOVE.B  D2,(A1)+
  104.     CMP.W   #1,D1
  105.     BNE.S   .1
  106.     MOVEQ   #2,D1           ; END OF ERPOS
  107.     CMP.B   #9,-1(A1)
  108.     BNE.S   .NT
  109.     MOVE.B  #" ",-1(A1)     ; A TAB? --> EXTRA SPACE
  110.     MOVE.B  #9,(A1)+
  111. .NT:    LEA .OFF(PC),A2
  112. .5: MOVE.B  (A2)+,(A1)+
  113.     BNE.S   .5
  114.     SUBQ.L  #1,A1
  115.     BRA.S   .1
  116. .NL:    CMP.W   #1,D1
  117.     BMI.S   .NL0
  118.     BEQ.S   .NL1
  119.     CLR.B   (A1)+           ; END OF STRING + ER
  120.     MOVE.L  ERBUF(PC),LINEOFF
  121.     BRA.S   .EXIT
  122. .NL0:   MOVE.L  ERBUF(PC),A1        ; NEXT STRING
  123.     BRA.S   .1
  124. .NL1:   MOVE.B  #" ",(A1)+      ; END OF STRING
  125.     LEA .OFF(PC),A2
  126. .4: MOVE.B  (A2)+,(A1)+
  127.     BNE.S   .4
  128.     MOVE.L  ERBUF(PC),LINEOFF
  129. .EXIT:  MOVEM.L (A7)+,D0-D4/A1-A4
  130.     MOVE.L  LINEOFF(PC),A0
  131.     RTS
  132. .ON:    DC.B    27,"[43;32m",0
  133. .OFF:   DC.B    27,"[0m",0
  134.  
  135. LINEOFF:    DC.L    0
  136. ERRWHERE:   DC.W    0       ; 0=?, 1=A0.ASC, 2==A3.INT
  137. INTERMED:   DC.L    0
  138. ERPOINT:    DC.L    0
  139. SAVEDREGS:  DC.L    0,0     ; A0,A3
  140. XTRALINES:  DC.W    0
  141. ERBUF:      DC.L    ESTACKBUF
  142. BYTEOFF:    DC.L    0
  143.  
  144. CONSTRUCT:
  145.     MOVE.L  SAVEDREGS+4(PC),D3  ; D3=INTERIM ERPOINT
  146.     BTST    #0,D3
  147.     BEQ.S   .EVEN
  148.     ADDQ.L  #1,D3
  149. .EVEN:  MOVE.L  INTERMED(PC),A3     ; A3=INTERIM START
  150.     MOVE.L  LINEOFF(PC),A0      ; A0=ASCII START
  151. .LOOP:  CMP.L   D3,A3
  152.     BPL .EXIT
  153. .EAT:   MOVE.B  (A0)+,D0        ; COLLECT WHITESPACE
  154.     BEQ .ERR
  155.     CMP.B   #" ",D0
  156.     BEQ.S   .EAT
  157.     CMP.B   #9,D0
  158.     BEQ.S   .EAT
  159.     CMP.B   #10,D0
  160.     BEQ.S   .EAT
  161.     CMP.B   #"-",D0
  162.     BEQ.S   .SCOM
  163.     CMP.B   #"/",D0
  164.     BNE.S   .TOKEN
  165.     CMP.B   #"*",(A0)
  166.     BNE.S   .TOKEN
  167.     ADDQ.L  #1,A0
  168.     MOVEQ   #1,D1           ; COMMENT COUNT
  169.     MOVE.L  ENDECODE,D2
  170. .COML:  TST.L   D1
  171.     BEQ.S   .EAT
  172.     MOVE.B  (A0)+,D0
  173.     CMP.B   #"*",D0
  174.     BNE.S   .1
  175.     CMP.B   #"/",(A0)
  176.     BNE.S   .COML
  177.     ADDQ.L  #1,A0
  178.     SUBQ.L  #1,D1
  179.     BRA.S   .COML
  180. .1: CMP.B   #"/",D0
  181.     BNE.S   .2
  182.     CMP.B   #"*",(A0)
  183.     BNE.S   .COML
  184.     ADDQ.L  #1,A0
  185.     ADDQ.L  #1,D1
  186.     BRA.S   .COML
  187. .2: CMP.B   #10,D0
  188.     BNE.S   .COML
  189.     CMP.L   D2,A0
  190.     BPL.S   .ERR
  191.     BRA.S   .COML           ;?
  192. .SCOM:  CMP.B   #">",(A0)
  193.     BNE.S   .TOKEN
  194.     MOVEQ   #10,D0
  195. .SCL:   CMP.B   (A0)+,D0
  196.     BNE.S   .SCL
  197.     BRA.S   .EAT
  198. .TOKEN: SUBQ.L  #1,A0
  199.     MOVEQ   #0,D1           ; ATTRIBUTE
  200.     MOVE.W  (A3)+,D0        ; TOKEN
  201.     CMP.W   #$100,D0
  202.     BPL.S   .ASM
  203.     CMP.W   #IOFF,D0
  204.     BMI.S   .3
  205.     BSR .ID
  206.     BRA .LOOP
  207. .3: LSL.L   #3,D0
  208.     EXT.L   D0
  209.     LEA .TAB(PC),A1
  210.     ADD.L   D0,A1
  211.     MOVE.L  4(A1),D1
  212.     MOVE.L  (A1),A1
  213.     JSR (A1)
  214.     BRA .LOOP
  215. .ASM:   CMP.W   #$400,D0
  216.     BPL.S   .ERR            ; FOR NOW.
  217.     BSR .ID
  218.     CMP.B   #".",(A0)
  219.     BNE.S   .XX
  220.     CMP.B   #10,1(A0)
  221.     BEQ.S   .XX
  222.     ADDQ.L  #2,A0
  223. .XX:    BRA .LOOP
  224. .EXIT:  MOVE.L  A0,ERPOINT
  225.     MOVEQ   #0,D0
  226.     RTS
  227. .ERR:   MOVEQ   #1,D0           ; !SHOULD BE 1 LATER!
  228.     MOVE.L  A0,ERPOINT      ; !SHOULD BE DELETED LATER!
  229.     RTS
  230. .TAB:
  231.     DC.L    .EX,0,.NUM,4,.ID,12,.ONE,",",.TWO,":="      ; 0-4
  232.     DC.L    .ID,4,.STR,0,.ONE,"+",.ONE,"-",.ONE,"*"     ; 5-9
  233.     DC.L    .ONE,"/",.ONE,"=",.ONE,">",.ONE,"<",.TWO,">="   ; 10-14
  234.     DC.L    .TWO,"<=",.TWO,"<>",.ONE,"(",.ONE,")",.ONE,":"  ; 15-19
  235.     DC.L    .ER,0,.EX,0,.ID,4,.ONE,"{",.ONE,"}"     ; 20-24
  236.     DC.L    .ID,8,.TWO,".W",.TWO,".L",.TWO,".B",.ONE4,"["   ; 25-29
  237.     DC.L    .ONE,"]",.ID,4,.ONE,"^",.TWO,"++",.TWO,"--" ; 30-34
  238.     DC.L    .ONE,".",.ONE,"`",.ONE,"!",.ID,4,.ID,4      ; 35-39
  239.     DC.L    .THREE,"<=>",.TWO,"::",.ID,4,.NUM,4,.ONE,"@"    ; 40-44
  240.     DC.L    .ID,4,.ONE,"|",.ID,2,.ID,6,.TWO,"<<",.TWO,">>",.ER,0  ; 45-51
  241.     DC.L    .ONE,"?",.THREE,':=:',.ID,4
  242. .ER:    ADDQ.L  #4,A7
  243.     BRA .ERR
  244. .EX:    ADDQ.L  #4,A7
  245.     BRA .EXIT
  246. .ID:    MOVE.B  (A0)+,D2
  247.     CMP.B   #"_",D2
  248.     BEQ.S   .ID
  249.     CMP.B   #"0",D2
  250.     BMI.S   .6
  251.     CMP.B   #"9"+1,D2
  252.     BMI.S   .ID
  253.     CMP.B   #"A",D2
  254.     BMI.S   .6
  255.     CMP.B   #"Z"+1,D2
  256.     BMI.S   .ID
  257.     CMP.B   #"a",D2
  258.     BMI.S   .6
  259.     CMP.B   #"z"+1,D2
  260.     BMI.S   .ID
  261. .6: SUBQ.L  #1,A0
  262.     ADD.L   D1,A3
  263.     RTS
  264. .NUM:   MOVE.B  (A0),D2
  265.     CMP.B   #"A",D2         ; SEE IF IT'S A CONSTANT
  266.     BMI.S   .10
  267.     CMP.B   #"Z"+1,D2
  268.     BMI.S   .ID
  269. .10:    CMP.B   #'"',D2
  270.     BEQ.S   .SSTR
  271.     MOVEQ   #0,D4           ; HEXFLAG
  272. .8: MOVE.B  (A0)+,D2
  273.     CMP.B   #"$",D2
  274.     BEQ.S   .7
  275.     CMP.B   #"%",D2
  276.     BEQ.S   .8
  277.     CMP.B   #".",D2         ; FOR FLOATS?
  278.     BEQ.S   .8
  279.     CMP.B   #"0",D2
  280.     BMI.S   .9
  281.     CMP.B   #"9"+1,D2
  282.     BMI.S   .8
  283.     TST.L   D4
  284.     BEQ.S   .9
  285.     CMP.B   #"A",D2
  286.     BMI.S   .9
  287.     CMP.B   #"G",D2
  288.     BMI.S   .8
  289.     CMP.B   #"a",D2
  290.     BMI.S   .9
  291.     CMP.B   #"z"+1,D2
  292.     BMI.S   .8
  293. .9: SUBQ.L  #1,A0
  294.     ADD.L   D1,A3
  295.     RTS
  296. .7: MOVEQ   #1,D4
  297.     BRA.S   .8
  298. .SSTR:  ADDQ.L  #1,A0
  299. .SSL:   CMP.B   #'"',(A0)+
  300.     BNE.S   .SSL
  301.     ADD.L   D1,A3
  302.     RTS
  303. .ONE:   CMP.B   (A0)+,D1
  304.     BEQ.S   .4
  305.     ADDQ.L  #4,A7           ; STACK BACK
  306.     BRA .ERR
  307. .4: RTS
  308. .ONE4:  CMP.B   (A0)+,D1        ; AS ONE, BUT NOW SKIPS A LONG
  309.     BEQ.S   .4B
  310.     ADDQ.L  #4,A7           ; STACK BACK
  311.     BRA .ERR
  312. .4B:    ADDQ.L  #4,A3
  313.     RTS
  314. .TWO:   MOVE.L  D1,D2
  315.     LSR.L   #8,D2
  316.     CMP.B   (A0)+,D2
  317.     BNE.S   .5
  318.     CMP.B   (A0)+,D1
  319.     BNE.S   .5
  320.     RTS
  321. .THREE: MOVE.L  D1,D2
  322.     SWAP    D2
  323.     CMP.B   (A0)+,D2
  324.     BNE.S   .5
  325.     MOVE.L  D1,D2
  326.     LSR.L   #8,D2
  327.     CMP.B   (A0)+,D2
  328.     BNE.S   .5
  329.     CMP.B   (A0)+,D1
  330.     BNE.S   .5
  331.     RTS
  332. .5: ADDQ.L  #4,A7           ; STACK BACK
  333.     BRA .ERR
  334. .STR:   ADDQ.L  #2,A3
  335.     MOVE.W  (A3)+,D2
  336.     EXT.L   D2
  337.     LSL.L   #1,D2
  338.     ADD.L   D2,A3
  339.     CMP.B   #"'",(A0)+
  340.     BNE.S   .SE
  341. .SL:    MOVE.B  (A0)+,D2
  342.     CMP.B   #10,D2
  343.     BEQ.S   .SE
  344.     CMP.B   #"'",D2
  345.     BNE.S   .SL
  346.     CMP.B   #"'",(A0)
  347.     BNE.S   .SEX
  348.     ADDQ.L  #1,A0
  349.     BRA.S   .SL
  350. .SEX:   RTS
  351. .SE:    ADDQ.L  #4,A7           ; STACK BACK
  352.     BRA .ERR
  353.  
  354.  
  355. WRITECON:             ; ADR D2, LEN D3
  356.     MOVE.L  STOUT(PC),D1
  357.     MOVE.L  DOSBASE(PC),A6
  358.     JSR -48(A6)
  359.     RTS
  360.  
  361. WRITELN:
  362.     MOVEQ   #1,D3
  363.     MOVE.L  #RETURNOUT,D2
  364.     BSR.S   WRITECON
  365.     RTS
  366.  
  367. WRITEFORMAT:          ; A0=STRING, A1=DATA
  368.     MOVE.L  #PRINTBUF,A3        ; USES D0-D3/A0-A3/A6
  369.     LEA .1(PC),A2       ; TRASH DIRNAME BUF....
  370.     MOVE.L  A3,D2
  371.     MOVE.L  4.W,A6
  372.     JSR -522(A6)
  373.     MOVE.L  D2,A0
  374. .2: TST.B   (A0)+
  375.     BNE.S   .2
  376.     SUBQ.L  #1,A0
  377.     MOVE.L  A0,D3
  378.     SUB.L   D2,D3
  379.     BSR WRITECON
  380.     RTS
  381. .1: MOVE.B  D0,(A3)+
  382.     RTS
  383.  
  384. WRITELINENUM:
  385.     MOVE.W  LINENUM(PC),D7
  386.     CMP.W   LINEWRITE(PC),D7
  387.     BPL.S   .1
  388.     RTS
  389. .1: BTST    #7,CODEPREFS+2
  390.     BNE.S   .11
  391.     MOVEM.L D0-D3/A0-A3,-(A7)
  392.     LEA .2(PC),A0
  393.     LEA .3(PC),A1
  394.     MOVE.W  LINEWRITE(PC),D0
  395.     EXT.L   D0
  396.     MOVE.L  D0,(A1)
  397.     BSR WRITEFORMAT
  398.     ADD.W   #100,LINEWRITE
  399.     MOVEM.L (A7)+,D0-D3/A0-A3
  400. .11:    RTS
  401. .2: DC.B    '%ld',13,0
  402.     EVEN
  403. .3: DC.L    0
  404.  
  405. NOERROR:
  406.     ADDQ.W  #1,ASSLINE
  407.     BTST    #4,CODEPREFS+3
  408.     BNE.S   .X
  409.     BTST    #3,CODEPREFS+3
  410.     BEQ.S   .3
  411.     BCLR    #0,WARNINGS+3
  412. .3: MOVE.L  WARNINGS(PC),D7
  413.     MOVEQ   #0,D6           ; BITCOUNT
  414.     LEA WARNINGTAB,A2
  415. .XL:CMP.W   #32,D6
  416.     BEQ.S   .X
  417.     BTST    D6,D7
  418.     BEQ.S   .1
  419.     MOVEQ   #9,D3
  420.     MOVE.L  #WARNINGMESSY,D2
  421.     BSR WRITECON
  422.     MOVE.L  D6,D5
  423.     LSL.L   #2,D5
  424.     LEA     WARNINGTAB,A0
  425.     MOVE.L  (A0,D5.L),D2
  426.     MOVE.L  D2,A0
  427.  
  428. ;.2:    TST.B   (A0)+
  429. ;   BNE.S   .2
  430. ;   SUBQ.L  #1,A0
  431. ;   MOVE.L  A0,D3
  432. ;   SUB.L   D2,D3
  433. ;   BSR WRITECON
  434.  
  435.     MOVEM.L D0-D3/A0-A3,-(A7)
  436.     LEA ASSLINE(PC),A1
  437.     BSR WRITEFORMAT
  438.     MOVEM.L (A7)+,D0-D3/A0-A3
  439.  
  440.     BSR WRITELN
  441.  
  442. .1: ADDQ.L  #1,D6
  443.     BRA.S   .XL
  444. .X: BTST    #7,CODEPREFS+2
  445.     BNE.S   .11
  446.     MOVE.L  #NOERMESSAGE,D2
  447.     MOVE.L  #NEMEND-NOERMESSAGE,D3
  448.     BSR WRITECON
  449.     BSR WRITELN
  450. .11:    RTS
  451. ;*-*
  452.  
  453.